package com.company.ljh.easy;
/**
 * 704.给定一个 n 个元素有序的（升序）整型数组 nums 和一个目标值 target  ，写一个函数搜索 nums 中的 target，如果目标值存在返回下标，否则返回 -1。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/binary-search
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

/**
 * @description:
 * @projectName:leet_code
 * @see:com.company.ljh.easy0
 * @author:ljh
 * @createTime:2022/5/29 12:10
 * @version:1.0
 */
public class 二分查找 {
    public static void main(String[] args) {
        二分查找 d = new 二分查找();
        int nums[]=new int[]{-1,0,3,5,9,12};
        int search = d.search(nums, -2);
        System.out.println(search);
    }
    public int search(int[] nums, int target) {
        return middleSearch(nums,target,0,nums.length-1);
    }
    private int middleSearch(int[] nums, int target,int start,int end){
        if (start >= end){
            if (nums[start] == target){
                return start;
            }else {
                return -1;
            }
        }else {
            //如果middle取的前一个值
            int middle = (start+end)/2;
            if (nums[middle] == target){
                return middle;
            }else if (nums[middle] < target){
                return middleSearch(nums,target,middle+1,end);
            }else {
                return middleSearch(nums,target,start,middle-1);
            }
        }
    }
}
